﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Yun.IM.Response;
using Yun.Interface;
using Yun.Util;

namespace Yun.IM.Request
{
    /// <summary>
    /// 获取实时路由消息
    /// yun.im.rongcloud.realtime.msg.list
    /// </summary>
    public class GetRealTimeMsgListRequest : ITopRequest<GetRealTimeMsgListResponse>
    {
        /// <summary>
        /// 页码
        /// </summary>
        public int PageNum { get; set; } = 1;

        /// <summary>
        /// 页容量
        /// </summary>
        public int PageSize { get; set; } = 1;


        /// <summary>
        /// 最后消息时间 
        /// </summary>
        public long? LastItemTime { get; set; } 

        /// <summary>
        /// 接收用户ID
        /// </summary>
        public long? ToUserID { get; set; }

        /// <summary>
        /// 消息类型
        /// 消息类型，文本消息 RC:TxtMsg 、 图片消息 RC:ImgMsg 、语音消息 RC:VcMsg 、图文消息 RC:ImgTextMsg 、位置消息 RC:LBSMsg 、添加联系人消息 RC:ContactNtf 、提示条通知消息 RC:InfoNtf 、资料通知消息 RC:ProfileNtf 、通用命令通知消息 RC:CmdNtf 、客服握手消息 RC:HsMsg 、客服挂断消息 RC:SpMsg
        /// </summary>
        public string ObjectName { get; set; }


        /// <summary>
        /// 会话类型
        /// 会话类型，二人会话是 PERSON 、讨论组会话是 PERSONS 、群组会话是 GROUP 、聊天室会话是 TEMPGROUP 、客服会话是 CUSTOMERSERVICE 、 系统通知是 NOTIFY 、应用公众服务是 MC 、公众服务是 MP。
        /// 客户端 SDK 中为 ConversationType ，二人会话是 1 、讨论组会话是 2 、群组会话是 3 、聊天室会话是 4 、客服会话是 5 、 系统通知是 6 、应用公众服务是 7 、公众服务是 8
        /// </summary>
        public string ChannelType { get; set; }


        public void Validate()
        {
            RequestValidator.ValidateMaxValue("pagesize", PageSize, 1000);
        }

        public string GetApiName()
        {
            return "yun.im.rongcloud.realtime.msg.list";
        }

        public IDictionary<string, string> GetParameters()
        {
            var parameters = new YunDictionary
            {
                {"pagenum", PageNum},
                {"pagesize", PageSize},
                {"touserid", ToUserID},
                {"objectname", ObjectName},
                {"channeltype", ChannelType},
                {"lastitemtime", LastItemTime}
            };

            return parameters;
        }

    }
}
